home *** CD-ROM | disk | FTP | other *** search
- #include <WM.h>
- #include <MyStructs.h>
- #include <IText.h>
- #include <Screen.h>
-
- VOID TestSok()
- {
- if(Sok==0)
- {
- ClearMenuStrip(WMwin);
- WMItem16.Flags=ItemOnC;
- WMItem14.Flags=ItemOnC;
- WMItem12.Flags=ItemOnC;
- WMItem11a.Flags=ItemOnC;
- SetMenuStrip(WMwin,&WMMenu6);
- Sok++;
- }
- }
- USHORT NewSc()
- {
- if(asc=(struct MyScreen *)AllocMem(sizeof(struct MyScreen),MEMF_CLEAR|MEMF_PUBLIC))
- {
- if(firstS==NULL) firstS=asc;
- asc->Parent=lastS;
- if(lastS) lastS->NextScreen=asc;
- asc->Width=640;
- asc->Height=WMsc->Height;
- asc->Depth=2;
- asc->BlockPen=1;
- asc->ViewModes=HIRES;
- asc->Type=WBENCHSCREEN;
- asc->Font=f2;
- asc->Colors=4;
- if(!(asc->sc=(struct Screen *)NScreen()))
- {
- FreeMem(asc,sizeof(struct MyScreen));
- if(asc==firstS)
- {
- firstS=NULL;
- asc=NULL;
- }
- else
- {
- lastS=asc->Parent;
- asc=lastS;
- asc->NextScreen=NULL;
- sc=asc->sc;
- nosc=asc;
- }
- return(1);
- }
- sc=asc->sc;
- lastS=asc;
- nosc=asc;
- firstW=NULL;
- lastW=NULL;
- if(NewWin(0)) return(1);
- asc->FirstWindow=awin;
- firstW=awin;
- lastW=awin;
- TestSok();
- GadOff();
- for(i=0; i<32; i++)
- asc->ColorMap[i]=STDColors[i];
- GetColors();
- return(0);
- }
- return(1);
- }
- VOID GetColors()
- {
- vp=&sc->ViewPort;
- LoadRGB4(vp,&asc->ColorMap[0],asc->Colors);
- }
- NScreen()
- {
- struct NewScreen AScreen;
-
- AScreen.LeftEdge=asc->LeftEdge;
- AScreen.TopEdge=asc->TopEdge;
- AScreen.Width=asc->Width;
- AScreen.Height=asc->Height;
- AScreen.Depth=asc->Depth;
- AScreen.DetailPen=asc->DetailPen;
- AScreen.BlockPen=asc->BlockPen;
- AScreen.ViewModes=asc->ViewModes & 0xFBFF;
- AScreen.Type=asc->Type & 0xFF3F;
- AScreen.Font=NULL;
- if(asc->Font==1) AScreen.Font=&ZS8;
- if(asc->Font==2) AScreen.Font=&ZS9;
- AScreen.DefaultTitle=NULL;
- if(strlen(asc->Title)>0) AScreen.DefaultTitle=asc->Title;
- AScreen.Gadgets=NULL;
- AScreen.CustomBitMap=NULL;
- return((struct Screen *)OpenScreen(&AScreen));
- }
-
- VOID SetSDefines()
- {
- Wdetail=asc->DetailPen;
- sprintf(DETAILBuff,"%d",Wdetail);
- Wblock=asc->BlockPen;
- sprintf(BLOCKBuff,"%d",Wblock);
- Wleft=asc->LeftEdge;
- sprintf(LEFTBuff,"%d",Wleft);
- Wtop=asc->TopEdge;
- sprintf(TOPBuff,"%d",Wtop);
- Wwidth=asc->Width;
- sprintf(WIDTHBuff,"%d",Wwidth);
- Wheight=asc->Height;
- sprintf(HEIGHTBuff,"%d",Wheight);
- Wdepth=asc->Depth;
- sprintf(DEPTHBuff,"%d",Wdepth);
- TITLEInfo.DispPos=0;
- strcpy(TITLEBuff,asc->Title);
- strcpy(GNAMEBuff,asc->Name);
- strcpy(BPOINTERBuff,asc->BitMap);
- strcpy(GPOINTERBuff,asc->Gadgets);
- f2=asc->Font;
- TxS=8;
- if(f2==2) TxS=10;
- SText[12].IText=FONT[f2];
- Wtype=asc->Type;
- for(i=2; i<5; i++)
- {
- SFGad[i].Flags=NULL;
- if(Wtype & SFLAGS[i])
- SFGad[i].Flags=SELECTED;
- }
- Wview=asc->ViewModes;
- for(i=0; i<7; i++)
- {
- SVGad[i].Flags=NULL;
- if(Wview & SVIEWS[i])
- SVGad[i].Flags=SELECTED;
- }
- }
-
- USHORT NewScDef()
- {
- USHORT quit=1;
- if(asc==NULL)
- {
- asc=firstS;
- firstW=asc->FirstWindow;
- awin=firstW;
- lastW=firstW;
- while(awin)
- {
- lastW=awin;
- awin=awin->NextWindow;
- }
- awin=lastW;
- nosc=asc;
- }
- ScreenToFront(WMsc);
- SetSDefines();
- SWindow.Screen=WMsc;
- if(!(Wwin=(struct Window *)OpenWindow(&SWindow))) return(1);
- Wrp=Wwin->RPort;
- WinBorder(Wwin);
- PrintIText(Wrp,&SText[27],0,0);
- if((asc->Type & 0x000q) == 1) Box(21,39,21,8,119,&SFGad[1]);
- if((asc->Type & 0x000F) == 15) Box(21,39,32,8,119,&SFGad[1]);
-
- do
- {
- Wait(1L << Wwin->UserPort->mp_SigBit);
- GetMessage(Wwin);
- switch(class)
- {
- case GADGETUP:
- switch(Id)
- {
- /* EXIT */
- case 0: quit=0;
- break;
- /* OK */
- case 1: quit=2;
- if(Wdepth==0) Wdepth++;
- if(Wdepth > 4 && (Wview & HIRES))
- Wdepth=4;
- if(Wdepth > 5)
- {
- if((Wview & HAM)==0 &&
- (Wview & EXTRA_HALFBRITE)==0)
- Wdepth=5;
- }
- asc->Depth=Wdepth;
- asc->Colors=1 << Wdepth;
- if(asc->Colors==64) asc->Colors=32;
- asc->BlockPen=Wblock;
- asc->DetailPen=Wdetail;
- if(Wview & HAM)
- {
- if(Wheight > 256)
- Wheight=256;
- if(Wview & LACE)
- Wview ^= LACE;
- }
- asc->Height=Wheight;
- asc->Width=Wwidth;
- asc->TopEdge=Wtop;
- asc->LeftEdge=Wleft;
- asc->Font=f2;
- strcpy(asc->Title,TITLEBuff);
- strcpy(asc->Gadgets,GPOINTERBuff);
- strcpy(asc->BitMap,BPOINTERBuff);
- asc->Type=Wtype;
- strcpy(asc->Name,GNAMEBuff);
- asc->ViewModes=Wview;
- break;
-
- /* Depth */
- case 4: Wdepth=DEPTHInfo.LongInt;
- break;
- /* BlockPen */
- case 5: Wblock=BLOCKInfo.LongInt;
- break;
- /* DetailPen */
- case 6: Wdetail=DETAILInfo.LongInt;
- break;
- /* Height */
- case 7: Wheight=HEIGHTInfo.LongInt;
- break;
- /* Width */
- case 8: Wwidth=WIDTHInfo.LongInt;
- break;
- /* TopEdge */
- case 9: Wtop=TOPInfo.LongInt;
- break;
- /* LeftEdge */
- case 10: Wleft=LEFTInfo.LongInt;
- break;
- /* Title */
- case 11: break;
- /* Name */
- case 26: break;
- /* Gadget-Pointer */
- case 12: break;
- /* BitMap-Pointer */
- case 13: break;
- /* CLOSE */
- case 2: if(Error(6,0,0)==0) break;
- if(asc->Parent)
- {
- asc->Parent->NextScreen=asc->NextScreen;
- if(asc->NextScreen)
- {
- asc->NextScreen->Parent=asc->Parent;
- helpS=asc->NextScreen;
- }
- else
- {
- helpS=asc->Parent;
- lastS=helpS;
- }
- }
- else
- {
- if(asc->NextScreen)
- {
- firstS=asc->NextScreen;
- firstS->Parent=NULL;
- helpS=firstS;
- }
- else
- {
- Sok=0;
- nosc=NULL;
- lastS=NULL;
- firstS=NULL;
- helpS=NULL;
- sc=WMsc;
- }
- }
- CloseAwinAll(asc->FirstWindow);
- CloseScreen(asc->sc);
- FreeMem(asc,sizeof(struct MyScreen));
- asc=helpS;
- quit=0;
- if(asc)
- {
- sc=asc->sc;
- firstW=asc->FirstWindow;
- WFolge();
- awin=helpW;
- }
- else
- {
- if(noscW)
- {
- firstW=noscW;
- WFolge();
- awin=helpW;
- }
- }
- break;
- } /* switch Id */
- break;
-
- case GADGETDOWN:
- /* FONT */
- if(Id==3)
- {
- if(++f2 == 3) f2=0;
- SText[12].IText=FONT[f2];
- RefreshGList(&SFONT,Wwin,NULL,1);
- TxS=8;
- if(f2==2) TxS=10;
- break;
- }
- if(Id==14)
- {
- Wtype &= 0xFFF0;
- Box(21,39,21,8,119,&SFGad[1]);
- }
- else if(Id==15)
- {
- Wtype &= 0xFFF0;
- Box(21,39,32,8,119,&SFGad[1]);
- }
- if(Id > 13 && Id < 19)
- Wtype ^= SFLAGS[Id-14];
- if(Id > 18 && Id < 26)
- Wview ^= SVIEWS[Id-19];
- break;
- } /* switch class */
- } while(quit==1); /* do */
- CloseWindow(Wwin);
- Work();
- MenuOff();
- SaveOk=0;
- if(quit==2)
- {
- CloseAwin(asc->FirstWindow);
- CloseScreen(asc->sc);
- sc=(struct Screen *)NScreen();
- asc->sc=sc;
- GetColors();
- awin=asc->FirstWindow;
- firstW=awin;
- lastW=awin;
- while(awin)
- {
- lastW=awin;
- awin->Screen=sc;
- awin->win=NULL;
- SetNewWin(1);
- awin=awin->NextWindow;
- }
- awin=lastW;
- SaveOk=1;
- }
- if(awin)
- {
- SetNewWin(0);
- SaveOk=1;
- }
- ScreenToFront(sc);
- Ready();
- return(0);
- }
-
- VOID WFolge()
- {
- lastW=firstW;
- helpW=firstW;
- while(helpW)
- {
- lastW=helpW;
- helpW=helpW->NextWindow;
- }
- helpW=lastW;
- }
-